package br.com.ads.sgse.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.ads.sgse.converter.BaseEntity;


@Entity
@Table(name = "aluno")
public class Aluno implements Serializable, BaseEntity{
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(unique = true, nullable = false)
	private Long id;

	@Column(name = "nome_completo", nullable = false, length = 100)
	private String nomeCompleto;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_nascimento", nullable = false)
	private Date dataNascimento;

	@Column(name = "cor_raca", nullable = false, length = 15)
	private String corRaca;

	@Column(name = "sexo_aluno", length = 10)
	private String sexoAluno;

	@Column(nullable = false, length = 50)
	private String nomeMae;

	@Column(length = 50)
	private String nomePai;

	@Column(nullable = false, length = 15)
	private String nacionalidade;

	@Column(nullable = false, length = 50)
	private String pais;
	
	
	//@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "aluno", orphanRemoval = true)
	//private List<TurmaAluno> turmaAlunos = new ArrayList<TurmaAluno>();

	
	@ManyToOne
	@JoinColumn(name = "municipio_id", nullable = false)
	private Municipio municipio2;

	@Column(length = 70)
	private String deficiencia;

	@Column(length = 15)
	private String identidade;

	@Column(name = "tipo_via_identidade", length = 10)
	private String tipoViaIdentidade;

	@ManyToOne
	@JoinColumn(name = "orgao_emissor_id")
	private OrgEmissorIdentidade orgEmissorIdentidade;
	
	@ManyToOne
	@JoinColumn(name = "turma")
	private Turma turma;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_emisao_identidade")
	private Date dataEmisaoIdentidade;

	@ManyToOne
	@JoinColumn(name = "unif_id_identidade")
	private UnidadeFederacao unidadeFederacao4;

	@Column(name = "tipo_certidao", length = 20)
	private String tipoCertidao;
	
	@Column(name = "termo_certidao", precision = 10)
	private BigDecimal termoCertidao;

	@Column(name = "folha_certidao", length = 10)
	private String folhaCertidao;

	@Column(name = "livro_certidao", length = 10)
	private String livroCertidao;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_emissao_certidao")
	private Date dataEmissaoCertidao;

	@Column(name = "nome_cartorio", length = 50)
	private String nomeCartorio;

	@ManyToOne
	@JoinColumn(name = "municipio_id_cartorio")
	private Municipio municipio1;

	@Column(name = "numero_certidao_nova", precision = 50)
	private BigDecimal numeroCertidaoNova;

	@Column(name = "documento_estrangeiro_passaporte", precision = 20)
	private BigDecimal documentoEstrangeiroPassaporte;

	@Column(length = 14)
	private String cpf;

	@Column(length = 10)
	private String cep;

	@Column(nullable = false, length = 70)
	private String endereco;

	@Column(name = "numero_endereco", nullable = false, length = 5)
	private String numeroEndereco;

	@Column(name = "end_complemento", length = 50)
	private String endComplemento;

	@Column(length = 30, nullable = false)
	private String bairro;

	@ManyToOne
	@JoinColumn(name = "municipio_id_endereco", nullable = false)
	private Municipio municipio3;

	public Aluno() {
	}

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getBairro() {
		return this.bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCep() {
		return this.cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCorRaca() {
		return this.corRaca;
	}

	public void setCorRaca(String corRaca) {
		this.corRaca = corRaca;
	}

	public String getCpf() {
		return this.cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public Date getDataEmisaoIdentidade() {
		return this.dataEmisaoIdentidade;
	}

	public void setDataEmisaoIdentidade(Date dataEmisaoIdentidade) {
		this.dataEmisaoIdentidade = dataEmisaoIdentidade;
	}

	public Date getDataEmissaoCertidao() {
		return this.dataEmissaoCertidao;
	}

	public void setDataEmissaoCertidao(Date dataEmissaoCertidao) {
		this.dataEmissaoCertidao = dataEmissaoCertidao;
	}

	public Date getDataNascimento() {
		return this.dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public String getDeficiencia() {
		return this.deficiencia;
	}

	public void setDeficiencia(String deficiencia) {
		this.deficiencia = deficiencia;
	}

	public BigDecimal getDocumentoEstrangeiroPassaporte() {
		return this.documentoEstrangeiroPassaporte;
	}

	public void setDocumentoEstrangeiroPassaporte(
			BigDecimal documentoEstrangeiroPassaporte) {
		this.documentoEstrangeiroPassaporte = documentoEstrangeiroPassaporte;
	}

	public String getEndComplemento() {
		return this.endComplemento;
	}

	public void setEndComplemento(String endComplemento) {
		this.endComplemento = endComplemento;
	}

	public String getEndereco() {
		return this.endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getFolhaCertidao() {
		return this.folhaCertidao;
	}

	public void setFolhaCertidao(String folhaCertidao) {
		this.folhaCertidao = folhaCertidao;
	}

	public String getIdentidade() {
		return this.identidade;
	}

	public void setIdentidade(String identidade) {
		this.identidade = identidade;
	}

	public String getLivroCertidao() {
		return this.livroCertidao;
	}

	public void setLivroCertidao(String livroCertidao) {
		this.livroCertidao = livroCertidao;
	}

	public String getNacionalidade() {
		return this.nacionalidade;
	}

	public void setNacionalidade(String nacionalidade) {
		this.nacionalidade = nacionalidade;
	}

	public String getNomeCartorio() {
		return this.nomeCartorio;
	}

	public void setNomeCartorio(String nomeCartorio) {
		this.nomeCartorio = nomeCartorio;
	}

	public String getNomeCompleto() {
		return this.nomeCompleto;
	}

	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}

	public String getNomeMae() {
		return this.nomeMae;
	}

	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}

	public String getNomePai() {
		return this.nomePai;
	}

	public void setNomePai(String nomePai) {
		this.nomePai = nomePai;
	}

	public String getNumeroEndereco() {
		return this.numeroEndereco;
	}

	public void setNumeroEndereco(String numeroEndereco) {
		this.numeroEndereco = numeroEndereco;
	}

	public BigDecimal getNumeroCertidaoNova() {
		return this.numeroCertidaoNova;
	}

	public void setNumeroCertidaoNova(BigDecimal numeroCertidaoNova) {
		this.numeroCertidaoNova = numeroCertidaoNova;
	}

	public String getPais() {
		return this.pais;
	}

	public void setPais(String pais) {
		this.pais = pais;
	}

	public String getSexoAluno() {
		return this.sexoAluno;
	}

	public void setSexoAluno(String sexoAluno) {
		this.sexoAluno = sexoAluno;
	}

	public BigDecimal getTermoCertidao() {
		return this.termoCertidao;
	}

	public void setTermoCertidao(BigDecimal termoCertidao) {
		this.termoCertidao = termoCertidao;
	}

	public String getTipoCertidao() {
		return this.tipoCertidao;
	}

	public void setTipoCertidao(String tipoCertidao) {
		this.tipoCertidao = tipoCertidao;
	}

	public String getTipoViaIdentidade() {
		return this.tipoViaIdentidade;
	}

	public void setTipoViaIdentidade(String tipoViaIdentidade) {
		this.tipoViaIdentidade = tipoViaIdentidade;
	}

	public Municipio getMunicipio1() {
		return this.municipio1;
	}

	public void setMunicipio1(Municipio municipio1) {
		this.municipio1 = municipio1;
	}

	public Municipio getMunicipio2() {
		return this.municipio2;
	}

	public void setMunicipio2(Municipio municipio2) {
		this.municipio2 = municipio2;
	}

	public OrgEmissorIdentidade getOrgEmissorIdentidade() {
		return this.orgEmissorIdentidade;
	}

	public void setOrgEmissorIdentidade(
			OrgEmissorIdentidade orgEmissorIdentidade) {
		this.orgEmissorIdentidade = orgEmissorIdentidade;
	}

	public Municipio getMunicipio3() {
		return municipio3;
	}

	public void setMunicipio3(Municipio municipio3) {
		this.municipio3 = municipio3;
	}

	public void setUnidadeFederacao4(UnidadeFederacao unidadeFederacao4) {
		this.unidadeFederacao4 = unidadeFederacao4;
	}

	public UnidadeFederacao getUnidadeFederacao4() {
		return unidadeFederacao4;
	}

	public Turma getTurma() {
		return turma;
	}

	public void setTurma(Turma turma) {
		this.turma = turma;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((bairro == null) ? 0 : bairro.hashCode());
		result = prime * result + ((cep == null) ? 0 : cep.hashCode());
		result = prime * result + ((corRaca == null) ? 0 : corRaca.hashCode());
		result = prime * result + ((cpf == null) ? 0 : cpf.hashCode());
		result = prime
				* result
				+ ((dataEmisaoIdentidade == null) ? 0 : dataEmisaoIdentidade
						.hashCode());
		result = prime
				* result
				+ ((dataEmissaoCertidao == null) ? 0 : dataEmissaoCertidao
						.hashCode());
		result = prime * result
				+ ((dataNascimento == null) ? 0 : dataNascimento.hashCode());
		result = prime * result
				+ ((deficiencia == null) ? 0 : deficiencia.hashCode());
		result = prime
				* result
				+ ((documentoEstrangeiroPassaporte == null) ? 0
						: documentoEstrangeiroPassaporte.hashCode());
		result = prime * result
				+ ((endComplemento == null) ? 0 : endComplemento.hashCode());
		result = prime * result
				+ ((endereco == null) ? 0 : endereco.hashCode());
		result = prime * result
				+ ((folhaCertidao == null) ? 0 : folhaCertidao.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result
				+ ((identidade == null) ? 0 : identidade.hashCode());
		result = prime * result
				+ ((livroCertidao == null) ? 0 : livroCertidao.hashCode());
		result = prime * result
				+ ((municipio1 == null) ? 0 : municipio1.hashCode());
		result = prime * result
				+ ((municipio2 == null) ? 0 : municipio2.hashCode());
		result = prime * result
				+ ((municipio3 == null) ? 0 : municipio3.hashCode());
		result = prime * result
				+ ((nacionalidade == null) ? 0 : nacionalidade.hashCode());
		result = prime * result
				+ ((nomeCartorio == null) ? 0 : nomeCartorio.hashCode());
		result = prime * result
				+ ((nomeCompleto == null) ? 0 : nomeCompleto.hashCode());
		result = prime * result + ((nomeMae == null) ? 0 : nomeMae.hashCode());
		result = prime * result + ((nomePai == null) ? 0 : nomePai.hashCode());
		result = prime
				* result
				+ ((numeroCertidaoNova == null) ? 0 : numeroCertidaoNova
						.hashCode());
		result = prime * result
				+ ((numeroEndereco == null) ? 0 : numeroEndereco.hashCode());
		result = prime
				* result
				+ ((orgEmissorIdentidade == null) ? 0 : orgEmissorIdentidade
						.hashCode());
		result = prime * result + ((pais == null) ? 0 : pais.hashCode());
		result = prime * result
				+ ((sexoAluno == null) ? 0 : sexoAluno.hashCode());
		result = prime * result
				+ ((termoCertidao == null) ? 0 : termoCertidao.hashCode());
		result = prime * result
				+ ((tipoCertidao == null) ? 0 : tipoCertidao.hashCode());
		result = prime
				* result
				+ ((tipoViaIdentidade == null) ? 0 : tipoViaIdentidade
						.hashCode());
		result = prime * result + ((turma == null) ? 0 : turma.hashCode());
		result = prime
				* result
				+ ((unidadeFederacao4 == null) ? 0 : unidadeFederacao4
						.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Aluno other = (Aluno) obj;
		if (bairro == null) {
			if (other.bairro != null)
				return false;
		} else if (!bairro.equals(other.bairro))
			return false;
		if (cep == null) {
			if (other.cep != null)
				return false;
		} else if (!cep.equals(other.cep))
			return false;
		if (corRaca == null) {
			if (other.corRaca != null)
				return false;
		} else if (!corRaca.equals(other.corRaca))
			return false;
		if (cpf == null) {
			if (other.cpf != null)
				return false;
		} else if (!cpf.equals(other.cpf))
			return false;
		if (dataEmisaoIdentidade == null) {
			if (other.dataEmisaoIdentidade != null)
				return false;
		} else if (!dataEmisaoIdentidade.equals(other.dataEmisaoIdentidade))
			return false;
		if (dataEmissaoCertidao == null) {
			if (other.dataEmissaoCertidao != null)
				return false;
		} else if (!dataEmissaoCertidao.equals(other.dataEmissaoCertidao))
			return false;
		if (dataNascimento == null) {
			if (other.dataNascimento != null)
				return false;
		} else if (!dataNascimento.equals(other.dataNascimento))
			return false;
		if (deficiencia == null) {
			if (other.deficiencia != null)
				return false;
		} else if (!deficiencia.equals(other.deficiencia))
			return false;
		if (documentoEstrangeiroPassaporte == null) {
			if (other.documentoEstrangeiroPassaporte != null)
				return false;
		} else if (!documentoEstrangeiroPassaporte
				.equals(other.documentoEstrangeiroPassaporte))
			return false;
		if (endComplemento == null) {
			if (other.endComplemento != null)
				return false;
		} else if (!endComplemento.equals(other.endComplemento))
			return false;
		if (endereco == null) {
			if (other.endereco != null)
				return false;
		} else if (!endereco.equals(other.endereco))
			return false;
		if (folhaCertidao == null) {
			if (other.folhaCertidao != null)
				return false;
		} else if (!folhaCertidao.equals(other.folhaCertidao))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (identidade == null) {
			if (other.identidade != null)
				return false;
		} else if (!identidade.equals(other.identidade))
			return false;
		if (livroCertidao == null) {
			if (other.livroCertidao != null)
				return false;
		} else if (!livroCertidao.equals(other.livroCertidao))
			return false;
		if (municipio1 == null) {
			if (other.municipio1 != null)
				return false;
		} else if (!municipio1.equals(other.municipio1))
			return false;
		if (municipio2 == null) {
			if (other.municipio2 != null)
				return false;
		} else if (!municipio2.equals(other.municipio2))
			return false;
		if (municipio3 == null) {
			if (other.municipio3 != null)
				return false;
		} else if (!municipio3.equals(other.municipio3))
			return false;
		if (nacionalidade == null) {
			if (other.nacionalidade != null)
				return false;
		} else if (!nacionalidade.equals(other.nacionalidade))
			return false;
		if (nomeCartorio == null) {
			if (other.nomeCartorio != null)
				return false;
		} else if (!nomeCartorio.equals(other.nomeCartorio))
			return false;
		if (nomeCompleto == null) {
			if (other.nomeCompleto != null)
				return false;
		} else if (!nomeCompleto.equals(other.nomeCompleto))
			return false;
		if (nomeMae == null) {
			if (other.nomeMae != null)
				return false;
		} else if (!nomeMae.equals(other.nomeMae))
			return false;
		if (nomePai == null) {
			if (other.nomePai != null)
				return false;
		} else if (!nomePai.equals(other.nomePai))
			return false;
		if (numeroCertidaoNova == null) {
			if (other.numeroCertidaoNova != null)
				return false;
		} else if (!numeroCertidaoNova.equals(other.numeroCertidaoNova))
			return false;
		if (numeroEndereco == null) {
			if (other.numeroEndereco != null)
				return false;
		} else if (!numeroEndereco.equals(other.numeroEndereco))
			return false;
		if (orgEmissorIdentidade == null) {
			if (other.orgEmissorIdentidade != null)
				return false;
		} else if (!orgEmissorIdentidade.equals(other.orgEmissorIdentidade))
			return false;
		if (pais == null) {
			if (other.pais != null)
				return false;
		} else if (!pais.equals(other.pais))
			return false;
		if (sexoAluno == null) {
			if (other.sexoAluno != null)
				return false;
		} else if (!sexoAluno.equals(other.sexoAluno))
			return false;
		if (termoCertidao == null) {
			if (other.termoCertidao != null)
				return false;
		} else if (!termoCertidao.equals(other.termoCertidao))
			return false;
		if (tipoCertidao == null) {
			if (other.tipoCertidao != null)
				return false;
		} else if (!tipoCertidao.equals(other.tipoCertidao))
			return false;
		if (tipoViaIdentidade == null) {
			if (other.tipoViaIdentidade != null)
				return false;
		} else if (!tipoViaIdentidade.equals(other.tipoViaIdentidade))
			return false;
		if (turma == null) {
			if (other.turma != null)
				return false;
		} else if (!turma.equals(other.turma))
			return false;
		if (unidadeFederacao4 == null) {
			if (other.unidadeFederacao4 != null)
				return false;
		} else if (!unidadeFederacao4.equals(other.unidadeFederacao4))
			return false;
		return true;
	}

	/*public List<TurmaAluno> getTurmaAlunos() {
		return turmaAlunos;
	}

	public void setTurmaAlunos(List<TurmaAluno> turmaAlunos) {
		this.turmaAlunos = turmaAlunos;
	}
*/
	
}